// 02.js
const Koa = require('koa');
const app = new Koa();

// const main = ctx => {
//     ctx.response.body = 'Hello World';
// };

// demos/03.js
// HTTP Response 的类型
// const main = ctx => {
//     if (ctx.request.accepts('xml')) {
//         ctx.response.type = 'xml';
//         ctx.response.body = '<data>Hello World</data>';
//     } else if (ctx.request.accepts('json')) {
//         ctx.response.type = 'json';
//         ctx.response.body = { data: 'Hello World' };
//     } else if (ctx.request.accepts('html')) {
//         ctx.response.type = 'html';
//         ctx.response.body = '<p>Hello World</p>';
//     } else {
//         ctx.response.type = 'text';
//         ctx.response.body = 'Hello World';
//     }
// };

// demos/04.js
// 1.4 网页模板
// const fs = require('fs');

// const main = ctx => {
//     ctx.response.type = 'html';
//     ctx.response.body = fs.createReadStream('./koaLearn/template.html');
// };

// demos/05.js
// 2.1 原生路由
// const main = ctx => {
//     if (ctx.request.path !== '/') {
//         ctx.response.type = 'html';
//         ctx.response.body = '<a href="/">Index Page</a>';
//     } else {
//         ctx.response.body = 'Hello World';
//     }
// };

// demos/06.js
// 2.2 koa-route 模块
// const route = require('koa-route');

// const about = ctx => {
//     ctx.response.type = 'html';
//     ctx.response.body = '<a href="/">Index Page</a>';
// };

// const main = ctx => {
//     ctx.response.body = 'Hello World';
// };

// app.use(route.get('/', main));
// app.use(route.get('/about', about));
// app.use(main);

// demos/12.js
// 2.3 静态资源
// const path = require('path');
// const serve = require('koa-static');

// const main = serve(path.join(__dirname));
// app.use(main);

// demos/13.js
// 2.4 重定向
// const route = require('koa-route');
// const redirect = ctx => {
//     ctx.response.redirect('/');
//     ctx.response.body = '<a href="/">Index Page</a>';
// };

// app.use(route.get('/redirect', redirect));

// 3.3 中间件栈
// demos/09.js
// const one = (ctx, next) => {
//     console.log('>> one');
//     next();
//     console.log('<< one');
// }

// const two = (ctx, next) => {
//     console.log('>> two');
//     next();
//     console.log('<< two');
// }

// const three = (ctx, next) => {
//     console.log('>> three');
//     next();
//     console.log('<< three');
// }

// app.use(one); //注册中间件
// app.use(two); //注册中间件
// app.use(three); //注册中间件，注册了才有用

// 3.4 异步中间件
// demos/10.js
// const fs = require('fs/promises');


// const main = async function(ctx, next) {
//     ctx.response.type = 'html';
//     ctx.response.body = await fs.readFile('./koaLearn/template.html', 'utf8');
// };

// app.use(main);

// demos/11.js
// 3.5 中间件的合成
const compose = require('koa-compose');

const logger = (ctx, next) => {
    console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`);
    next();
}

const main = ctx => {
    ctx.response.body = 'Hello World';
};

const middlewares = compose([logger, main]);
app.use(middlewares);

app.listen(4000);